;(function(){
  var ddAccount = {
    init:function(){
      var self = this;
      self.isShowMenu()
      self.configNodeUsers()
    },
    // 选定的成员数据
    assigneesData:{
      'userIds':[],
      'userNames':[]
    },
    // 已选组员
    selectedMember:[],
    // 租户下的用户
    tenantsUser:[],
    // 新建保存
    saveCreate:function(){
      var self = this;
      var userIds = null;
      if(self.assigneesData.userIds.length == 0) userIds = '#';
      if(self.assigneesData.userIds.length !== 0) userIds = JSON.stringify(self.assigneesData.userIds);

      hlhttp.post({
        url:'user/corp/sync_account',
        data:{ 'user_ids': userIds },
        success:function(data){
          hl.toast('保存成功')
          $('.ddAccount-pop').hide()
          $('.ddAccountLayer').hide()
        }
      })
    },
    // 获取组织架构节点数据
    // id:父级菜单ID index:菜单级别 containerNode:菜单容器 isUsers:加载对子级菜单是否为成员 默认为false
    getOrganizationNodeData:function (id,index,containerNode,member) {
      var self = this;
      var dtd = $.Deferred();

      hlhttp.get({
        url: 'user/corp/dept_organization',
        data: {dept_id: id},
        success: function (data) {
          if(data.deptList.length){
            data.deptList.map(function (_item) {
              _item['index'] = index
            })
          }
          if(data.userList.length){
            data.userList.map(function (_item) {
              _item['index'] = index
            })
          }
          self.dom.organizationNode(data,containerNode)
          dtd.resolve(data);
        }
      })
      return dtd.promise();
    },
    // 展开收缩组织架构菜单
    isShowMenu:function () {
      var self = this;
      $('.assignees-wrapper').unbind().on('click','.item',function (event) {
        // if(event.target.className.indexOf('assignees-checkbox') > -1) return false;
        var _$this = $(this);
        var $menu = _$this;
        var arrowSign = $menu.find('.arrow-sign');  // 箭头指示图标
        var ulContainer = $menu.siblings('ul');
        var state = $menu.attr('data-state');   // 状态
        var load = $menu.attr('data-load');  // 是否需要加载数据
        var type = $menu.attr('data-type');  // 类型
        var id = $menu.attr('data-id');      // 组织ID
        var index = $menu.data('index'); // 菜单级别
        var memberArr = self.assigneesData['userIds'];    // 节点处理人

        // 节点类型为成员时不再下级数据
        if(type == 'CY')return
        // 菜单打开关闭时更换对应状态
        // 如果没有子级菜单 则点击时不更换状态
        var updateMenuState = function () {
          if(state === 'close'){
            arrowSign.addClass('icon-GM－open').removeClass('icon-GM－stop')
            _$this.attr('data-state','open').attr('data-load','true')
            ulContainer.show()
          }
          if(state === 'open'){
            arrowSign.removeClass('icon-GM－open').addClass('icon-GM－stop')
            _$this.attr('data-state','close').attr('data-load','true')
            ulContainer.hide()
          }
        }
        // 如果没加载过下级数据 则加载新数据
        if(load === 'false'){
          self.getOrganizationNodeData(id,index + 1,ulContainer,memberArr)
            .done(function (data) {
              if(data.deptList.length || data.userList.length) updateMenuState()
            })
        }
        if(load === 'true') updateMenuState()
      })

    },
    // 配置节点处理人
    configNodeUsers:function () {
      var self = this;
      $('.assignees-wrapper').on('click','.assignees-checkbox',function (e) {
        var _$this = $(this);
        var $menu = _$this.parent('div');
        var ulContainer = $menu.siblings('ul');
        var state = $menu.attr('data-state');   // 状态
        var load = $menu.data('load');  // 是否需要加载数据
        var type = $menu.data('type');  // 类型
        var id = $menu.attr('data-id');      // 组织ID
        var name = _$this.siblings('.name').text(); // 节点名称
        var index = $menu.data('index'); // 菜单级别
        var dataIndex = 0;
        var checkBoxState = _$this.hasClass('active'); // true 为已选  false 为未选
        var memberArr = self.assigneesData['userIds'];    // 节点处理人
        // 选中的岗位 正选
        var positionMainDraw = function () {
          ulContainer.find('.assignees-checkbox').each(function () {
            var type = $(this).parents('.item').attr('data-type')
            if(!$(this).hasClass('active') && type == 'CY'){
              $(this).addClass('active')
              var id = $(this).parent('div').attr('data-id');
              var name = $(this).siblings('.name').text();
              var obj = {}
              self.assigneesData['userIds'].push(id)
              self.assigneesData['userNames'].push(name)
              self.selectedMember.push({'userId':id,'userName':name})
            }
          })
          _$this.addClass('active')
          self.dom.memberList(self.selectedMember)
        }


        if(type == 'PO' && checkBoxState === false){
          if( state == 'open')positionMainDraw()
          if( state == 'close'){
            self.getOrganizationNodeData(id,index + 1,ulContainer,true,memberArr)
              .done(function (data) {
                if(data.length === 0)return
                positionMainDraw()
              })
          }
        }

        // 选中的岗位 反选
        var positionInvert = function () {
          ulContainer.find('.assignees-checkbox').each(function () {
            var id = $(this).parent('div').attr('data-id');
            var name = $(this).siblings('.name').text();
            var index = 0;
            $(this).removeClass('active')
            self.assigneesData['userNames'] = hlArrayUtil.deleteItem(self.assigneesData['userNames'],name)
            self.assigneesData['userIds'] = hlArrayUtil.deleteItem(self.assigneesData['userIds'],id)

            self.selectedMember.map(function(_item){
              if(_item.userId === id){
                self.selectedMember = hlArrayUtil.deleteIndexItem(self.selectedMember,index)
              }
              index++;
            })
          })
          _$this.removeClass('active')
          self.dom.memberList(self.selectedMember)
        }
        if(type == 'PO' && checkBoxState === true){
          if(state == 'open')positionInvert()
          if(state == 'close'){
            self.getOrganizationNodeData(id,index + 1,ulContainer,true,memberArr)
              .done(function (data) {
                if(data.length === 0)return
                positionInvert()
              })
          }
        }

        // 选中的岗位下成员 正选
        // 是否全部选中，若成员全部选中，则对应上级岗位勾选
        var isAllSelected = function () {
          var $gwMenu = _$this.parent().parent().parent().siblings('div');
          var $member = _$this.parent().parent().parent().find('.assignees-checkbox');
          var flag = true;
          $member.each(function () {
            if(!$(this).hasClass('active')){
              flag = false
            }
          })
          // flag为true 选中岗位 反之不选中岗位
          if(flag){
            $gwMenu.find('.assignees-checkbox').addClass('active');
          }else{
            $gwMenu.find('.assignees-checkbox').removeClass('active');
          }
        }
        // 选中成员
        var selectedMember = function(){
          var id = _$this.parent('div').attr('data-id');
          var name = _$this.siblings('.name').text();
          var obj = {}

          _$this.addClass('active')
          // 如果该用户原来已添加过，则不再重复添加   如 一个人员在多部门
          if(self.assigneesData['userIds'].indexOf(id) === -1){
            self.assigneesData['userIds'].push(id)
            self.assigneesData['userNames'].push(name)
            self.selectedMember.push({'userId':id,'userName':name})
          }
          if(self.assigneesData['userIds'].indexOf(id) !== -1){
            $('.assignees-checkbox ').each(function(_i,_el){
              if($(this).parents('div').attr('data-id') === id){
                $(this).addClass('active')
              }
            })
          }

          isAllSelected()
          self.dom.memberList(self.selectedMember)
        }
        // 反选成员
        var cancelSelectedMember = function(){
          var id = _$this.parent('div').attr('data-id');
          var phone = _$this.parent('div').attr('data-userPhone');
          var account = _$this.parent('div').attr('data-userAccount');
          var name = _$this.siblings('.name').text();
          var index = 0;

          _$this.removeClass('active')
          // 如果该用户在多部门 则同时将多部门的勾选取消掉
          self.assigneesData['userNames'] = hlArrayUtil.deleteItem(self.assigneesData['userNames'],name)
          self.assigneesData['userIds'] = hlArrayUtil.deleteItem(self.assigneesData['userIds'],id)
          $('.assignees-checkbox ').each(function(_i,_el){
            if($(this).parents('div').attr('data-id') === id){
              $(this).removeClass('active')
            }
          })
          self.selectedMember.map(function(_item){
            if(_item.userId === id){
              self.selectedMember = hlArrayUtil.deleteIndexItem(self.selectedMember,index)
            }
            index++;
          })
          isAllSelected()
          self.dom.memberList(self.selectedMember)
        }

        // 选中的岗位下成员 正选
        if(type == 'CY' && checkBoxState == false){
          selectedMember()
        }
        // 选中的岗位下成员 反选
        if(type == 'CY' && checkBoxState === true){
          cancelSelectedMember()
        }
        e.stopPropagation();
      })
    },
    // 删除已选组员
    removeSelectedMember:function(){
      var self = this;
      $('.selected-member-list').on('click','.delete-member',function(){
        var id = $(this).parent('ul').attr('data-id');
        var name = $(this).siblings('.name').text();
        var index = 0;
        self.assigneesData['userNames'] = hlArrayUtil.deleteItem(self.assigneesData['userNames'],name)
        self.assigneesData['userIds'] = hlArrayUtil.deleteItem(self.assigneesData['userIds'],id)
        self.selectedMember.map(function(_item){
          if(_item.userId === id){
            self.selectedMember = hlArrayUtil.deleteIndexItem(self.selectedMember,index)
          }
          index++;
        })
        $(this).parent('ul').remove()
        // 反选左侧树形图中已勾选的成员
        $('.member .assignees-checkbox').each(function(i,el){
          var memberId = $(this).parent('div').attr('data-id');
          var $gwMenu = $(this).parent().parent().parent().siblings('div');
          if(memberId === id){
            $(this).removeClass('active')
            $gwMenu.find('.assignees-checkbox').removeClass('active');
          }
        })
        if(self.selectedMember.length === 0){
          $('.no-member').show()
        }
      })
    },

    clearData:function(){
      this.assigneesData.userIds = [];
      this.assigneesData.userNames = [];
      $('.assignees-container .assignees-wrapper').empty()
      $('.selected-member-list ul').remove()
      $('.no-member').show()
    },
    event:function(){
      var self = this;
    },
    dom:{
      organizationNode:function(data,containerNode){
        // 数据分为部门和成员  部门旁有展开收缩按钮  成员没有
        var html = ''
        var depData = data.deptList;
        var userData = data.userList;
        var isSelected = ''

        depData.map(function(item){
          // id  组织ID  type 组织类型  index 组织菜单级别  state 菜单状态（打开、关闭） load 点击菜单时是否需要加载新数据
          html += '<li>' +
            '<div class="member item item-' + item.index + '" data-id="' + item.id + '" data-index="' + item.index + '" data-state="close" data-type="PO" data-load="false">' +
            '<span class="hl-icon icon-GM－stop arrow-sign"></span>' +
            '<span class="assignees-checkbox ' + isSelected + '"></span>' +
            '<i class="name">' + item.name + '</i>' +
            '</div>' +
            '<ul class="container-' + item.index + '"></ul>' +
            '</li>'
        })

        userData.map(function(item){
          // id  组织ID  type 组织类型  index 组织菜单级别  state 菜单状态（打开、关闭） load 点击菜单时是否需要加载新数据
          html += '<li>' +
            '<div class="member item item-' + item.index + '" data-id="' + item.id + '" data-index="' + item.index + '" data-state="close" data-type="CY" data-load="false">' +
            '<span class="assignees-checkbox ' + isSelected + '"></span>' +
            '<i class="name">' + item.name + '</i>' +
            '</div>' +
            '<ul class="container-' + item.index + '"></ul>' +
            '</li>'
        })

        containerNode.html(html)
      },
      // 选过的组织成员
      memberList:function(data,length){
        var html = '';
        data.map(function(item){
          html += '<li class="select-member-item" data-id="' + item.userId + '">' + item.userName + '</li>'
        })
        $('.select-member-wrap').html(html)
      }
    }
  }

  window.ddAccount = ddAccount
}())
